package com.echo.util;

import java.util.Map;

import org.apache.commons.lang.StringUtils;


/**
 * 请求参数合法性的校验检测工具类
 * @version 1.0 Bug
 * @author tangsixiang
 */
public class ValidateUtil {
	/***
	 * 系统默认对参数合法性进行基础校验
	 * @param reqMap
	 * @return
	 */
	public  static boolean  validateCommonParames(Map<String,String> reqMap) throws Exception{
		     boolean  flag=true;
		for ( String keyStr : reqMap.keySet()) {
			if(flag&&ParamesList.params.containsKey(keyStr)){
				String[] paramsKey=ParamesList.params.get(keyStr).split("\\|");
				String bool=reqMap.get(keyStr).toString().trim().toUpperCase();
				 switch ( paramsKey[0]){
					 case "INT": //数字判断
						 
						 if(!StringUtils.isNumeric(bool)){
							 flag=false;
						 }
					  break;
					 case "BOOLEAN": //boolean类型判断
						if(bool.length()==1) {
							if(!(bool.equals("1")||bool.equals("0")))
							flag=false;
						}else{
							if(!bool.equals("TRUE")||!bool.equals("FALSE")){
								flag=false;
							}
						}
						  break;
					 case "STR":
						 if(paramsKey[1].equals("1")&&(bool==null||bool.equals(""))){
							 flag=false; 
						 }
						  break;	 
				 }
			}
		} 
		
	return flag;
	}
	
	/**
	 * 泛型中的参数必须存在
	 * 此方法在执行必要的业务逻辑前调用验证
	 * @param reqMap
	 * @param parames
	 * @return
	 */
	public  static boolean  validateMethodParames(Map<String,String> reqMap,String ... parames) throws Exception{
	     boolean  flag=true;
	      for (int i = 0; i < parames.length; i++) {
	    	  if(flag&&ParamesList.params.containsKey(parames[i])){
	    			String[] paramsKey=ParamesList.params.get(parames[i]).split("\\|"); 
	    			Object bool=reqMap.get(parames[i]);//传递过来的参数值 待验证
	   			 switch ( paramsKey[0]){
	   				 case "INT": //数字判断
	   					 
	   					 if(!StringUtils.isNumeric(bool.toString())){
	   						 flag=false;
	   					 }
	   				  break;
	   				 case "BOOLEAN": //boolean类型判断
	   					if(bool.toString().length()==1&&!(bool.equals("1")||bool.equals("0"))) {
	   						flag=false;
	   					}else{
	   						if(!bool.equals("TRUE")||!bool.equals("FALSE")){
	   							flag=false;
	   						}
	   					}
	   					  break;
	   				 case "STR":
	   					 if(paramsKey[1].equals("1")&&(bool==null||bool.equals(""))){
	   						 flag=false; 
	   					 }
	   					  break;
	   					
	   				 case "DATE": //日期格式验证类型判断
	   					 if(paramsKey[1].equals("1")&&StringUtil.validateEmail(bool.toString())){
	   						 flag=true; 
	   					 }else{
	   						 flag=false;
	   					 }
		   					  break; 
	   					  
	   				 case "EMAIL": //邮箱格式验证
	   					 if(paramsKey[1].equals("1")&&StringUtil.validateEmail(bool.toString())){
	   						 flag=true; 
	   					 }else{
	   						 flag=false;
	   					 }
		   					  break;  
	   			 }
	   			// if(!flag) throw new NoSuchFieldError(String.format("请仔细阅读文档，参数不足，相应参数为：[%s]",parames[i]));//必须验证的值不存的话 返回false;  
	   			 break; 
	    	  }else{
	    		  flag=false; 
	    	  }
		}

return flag;
}
}
